package com.young.lib_fragments.fms

import android.os.Bundle
import android.util.Log
import android.view.View
import com.young.lib_fragments.utils.DispatchOnWindowFocusUtil

/**
 * @author huangzehui
 * @date 2025/1/10 12:57 周五
 * @description 基础的fragment（支持懒加载）
 *
 * https://blog.51cto.com/u_14152/9094835
 *
 * ViewPager: FragmentStatePagerAdapter(supportFragmentManager,FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) 这个 adapter 配合使用，实现懒加载
 *
 * ViewPager2: 使用 FragmentStateAdapter(@NonNull FragmentActivity fragmentActivity) 这个方式的 adapter ，可使用当前的懒加载
 *
 */
abstract class BaseLazyFragment : BaseFragment() {

    // 是否首次展示
    private var mIsFirst = true

    // 页面是否可见
    private var mIsSupportVisible = false

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onResume() {
        super.onResume()
        mIsSupportVisible = true
        if (mIsFirst) {
            mIsFirst = false
            onFirstSupportVisible()
        } else {
            onSupportVisible()
        }
    }

    override fun onPause() {
        super.onPause()
        mIsSupportVisible = false
        onSupportInvisible()
    }

    override fun onDestroyView() {
        super.onDestroyView()
        mIsFirst = true
    }


    // 可见性相关方法 start

    /**
     * 当前的页面是否可见
     *
     * @return true: 可见 false：不可见
     */
    fun isSupportVisible(): Boolean {
        return mIsSupportVisible
    }

    /**
     * 首次可见
     */
    open fun onFirstSupportVisible() {
        Log.e("young_testkk", "onFirstSupportVisible: ${this}")
    }

    /**
     * 非首次可见
     */
    open fun onSupportVisible() {
        Log.e("young_testkk", "onSupportVisible: ${this}")
    }

    /**
     * 不可见
     */
    open fun onSupportInvisible() {
        Log.e("young_testkk", "onSupportInvisible: ${this}")
    }

    // 可见性相关方法 end

    /**
     * 触发 onWindowFocusChanged
     *
     * @param hasFocus 是否获取焦点, true: 已获取焦点 false：未获取焦点
     */
    fun triggerOnWindowFocusChanged(hasFocus: Boolean) {
        if (isSupportVisible()) {
            onWindowFocusChanged(hasFocus)
        }
    }

    /**
     * 获取焦点方法
     *
     * @param hasFocus 是否获取焦点, true: 已获取焦点 false：未获取焦点
     */
    open fun onWindowFocusChanged(hasFocus: Boolean) {
        Log.e("young_testkk", "onWindowFocusChanged: ${this}")
        DispatchOnWindowFocusUtil.disPathOnWindowFocusChanged(childFragmentManager, hasFocus)
    }

}